#!/bin/bash

# CSV 文件名
csv_file="api.csv"

# urlencode() - URL-encodes string
# Usage: urlencode "string"
urlencode() {
    local LC_ALL=C
    for (( i = 0; i < ${#1}; i++ )); do
        if [[ ${1:i:1} =~ [a-zA-Z0-9\.\~\_\-/] ]]; then
            printf "${1:i:1}"
        else
            printf '%%%02X' "'${1:i:1}"
        fi
    done
}

# 发起 GET 请求
request() {
    local url="$1"
    printf "发起 GET 请求：%s\n" "$url"
    curl -i "$url"
}

# 循环读取请求路径，发起 GET 请求
read_paths() {
    while IFS=, read -r path _; do
        # 去掉行末的 \r
        path=${path%$'\r'}
        # 拼接请求路径
        local encoded_path="$(urlencode "${path#/}")"
        local url="$1/$encoded_path"
        # 发起 GET 请求
        request "$url"
    done < <(tail -n +2 "$csv_file")
}

# 读取外部参数，如果没有参数，则提示用户输入
read -p "请输入要请求的IP地址（默认为 10.75.2.14）：" ip_address
ip_address=${ip_address:-10.75.2.14}

# 如果地址中包含冒号，则认为是IPv6地址
if [[ $ip_address == *\:* ]]; then
    # 如果地址中不包含方括号，则添加方括号
    if [[ $ip_address != \[* ]]; then
        ip_address="[$ip_address]"
    fi
    # 如果地址中不包含端口号，则添加端口号
    if [[ $ip_address != *\:* ]]; then
        ip_address="$ip_address"
    fi
else
    # 如果地址中不包含端口号，则添加端口号
    if [[ $ip_address != *\:* ]]; then
        ip_address="$ip_address"
    fi
fi

# 无限循环发起请求
while true; do
    read_paths "http://$ip_address:80"
done
